Return -1 for AtkText::get_caret_offset on failure
authorMartin Robinson <mrobinson@igalia.com>
Tue, 26 Mar 2019 14:28:03 +0000 (15:28 +0100)
committerMartin Robinson <mrobinson@igalia.com>
Tue, 26 Mar 2019 14:38:20 +0000 (15:38 +0100)
ATK now expects this virtual method to return -1 on failure. This allows
ATs to distinguish between a caret at position 0 and a failure.

gtk/a11y/gtkentryaccessible.c
gtk/a11y/gtklabelaccessible.c
gtk/a11y/gtktextaccessible.c
gtk/a11y/gtktextcellaccessible.c
gtk/a11y/gtktextviewaccessible.c

index d83d9f9c554f28dd345c87691acd940e5f1742c1..b833e3e37d54ada4b88ffa04e4770bb480eeba76 100644 (file)
@@ -874,12 +874,18 @@ static gint
 gtk_entry_accessible_get_caret_offset (AtkText *text)
 {
   GtkWidget *widget;
+  gboolean result;
+  int cursor_position;
 
   widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
-    return 0;
+    return -1;
+
+  result = gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), NULL, &cursor_position);
+  if (!result)
+    return -1;
 
-  return gtk_editable_get_position (GTK_EDITABLE (widget));
+  return cursor_position;
 }
 
 static gboolean
index 7361aa627ef7b45221899673d192d4c86b75f3ab..4c7fbf14f2bdd815ce050bbab58bb9528a086e42 100644 (file)
@@ -822,7 +822,11 @@ gtk_label_accessible_get_caret_offset (AtkText *text)
 
   widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
-    return 0;
+    return -1;
+
+  /* Non-selectable labels cannot have a caret. */
+  if (!gtk_label_get_selectable (GTK_LABEL (widget)))
+    return -1;
 
   return _gtk_label_get_cursor_position (GTK_LABEL (widget));
 }
index 6a0bd453b1e806074435b7cbf3b7d0ffb1d54417..8cea128a64e161f05c531b917d9562dd570c5a30 100644 (file)
@@ -317,12 +317,18 @@ static gint
 gtk_text_accessible_get_caret_offset (AtkText *text)
 {
   GtkWidget *widget;
+  gboolean result;
+  int cursor_position;
 
   widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
-    return 0;
+    return -1;
+
+  result = gtk_editable_get_selection_bounds (GTK_EDITABLE (widget), NULL, &cursor_position);
+  if (!result)
+    return -1;
 
-  return gtk_editable_get_position (GTK_EDITABLE (widget));
+  return cursor_position;
 }
 
 static gboolean
index 0fd83f95c7baa166e171fd9d14409fadff0928db..7546f2bb63dab9dd62d8c154dac15a645629c5a4 100644 (file)
@@ -198,6 +198,7 @@ static void
 gtk_text_cell_accessible_init (GtkTextCellAccessible *text_cell)
 {
   text_cell->priv = gtk_text_cell_accessible_get_instance_private (text_cell);
+  text_cell->priv->caret_pos = -1;
 }
 
 static gchar *
index b6b5a657f279706c8fe8fd7db8806485ddbe82d1..52c251478238ff131bf851c38739d784e154dd9b 100644 (file)
@@ -412,7 +412,7 @@ gtk_text_view_accessible_get_caret_offset (AtkText *text)
 
   widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
   if (widget == NULL)
-    return 0;
+    return -1;
 
   buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
   return get_insert_offset (buffer);